package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IEmpArchivesDAO;
import org.jsola.hr.dto.EmpArchivesAddDTO;
import org.jsola.hr.dto.EmpArchivesDTO;
import org.jsola.hr.dto.EmpArchivesUpdateDTO;
import org.jsola.hr.entity.EmpArchivesDO;
import org.jsola.hr.query.EmpArchivesQuery;
import org.jsola.hr.vo.EmpArchivesListVO;
import org.jsola.hr.vo.EmpArchivesVO;
import org.jsola.user.core.TokenUser;

import javax.validation.constraints.NotNull;
import java.util.List;


/**
 * 员工档案信息
 *
 * @author zhr
 */
public interface IEmpArchivesService extends IService<IEmpArchivesDAO, EmpArchivesDO> {

    /**
     * 新增员工档案信息
     * @param empArchivesAddDTO 新增员工档案信息DTO
     * @param tokenUser 当前用户
     * @return 员工档案信息详情信息
     */
    EmpArchivesVO save(EmpArchivesAddDTO empArchivesAddDTO, TokenUser tokenUser);

    /**
     * 修改员工档案信息
     * @param empArchivesUpdateDTO 修改员工档案信息DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(EmpArchivesUpdateDTO empArchivesUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除员工档案信息，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param empArchivesIds 员工档案信息id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...empArchivesIds);

    /**
     * 根据员工档案信息id查找
     * @param empArchivesId 员工档案信息id
     * @param siteId 所属站点id
     * @return 员工档案信息详情信息
     */
    EmpArchivesVO selectById(String empArchivesId, String siteId);

    /**
     * 查询员工档案信息
     * @param empArchivesQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工档案信息列表信息
     */
    List<EmpArchivesListVO> select(EmpArchivesQuery empArchivesQuery, String siteId);

    /**
    * 查询员工档案信息记录数
    * @param empArchivesQuery 查询条件
    * @param siteId 所属站点id
    * @return 员工档案信息记录数
    */
    int selectCount(EmpArchivesQuery empArchivesQuery, String siteId);

    /**
     * 分页查询员工档案信息
     * @param empArchivesQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工档案信息列表信息
     */
    Page<EmpArchivesListVO> selectPage(EmpArchivesQuery empArchivesQuery, String siteId);


    /**
     * 根据员工档案信息id查找
     * @param empArchivesId 员工档案信息id
     * @param siteId 所属站点id
     * @return 员工档案信息
     */
    EmpArchivesDO selectDOById(String empArchivesId, String siteId);

    /**
     * 查询员工档案信息
     * @param empArchivesQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工档案信息列表
     */
    List<EmpArchivesDO> selectDO(EmpArchivesQuery empArchivesQuery, String siteId);

    /**
     * 查找某员工的所有档案信息
     *
     * @param empId  员工id
     * @param siteId 站点
     * @return 员工的所有档案信息
     */
    List<EmpArchivesDO> listByEmpId(String empId, String siteId);

    /**
     * 根据公司id删除有档案信息
     *
     * @param companyId 公司id
     * @param tokenUser 当前用户
     */
    void deleteByCompanyId(@NotNull String companyId, TokenUser tokenUser);

    /**
     * 员工档案信息
     *
     * @param empArchivesList 员工证书
     * @param companyId       公司id
     * @param empId           人员id
     * @param tokenUser       当前用户
     */
    void publishEmpArchivesList(List<EmpArchivesDTO> empArchivesList, String companyId, String empId, TokenUser tokenUser);

}


